// ItemAdapter.java
package com.xxxy.ljh.myapplication.Adapter;

import android.content.Context;
import android.content.Intent;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;

import com.xxxy.ljh.myapplication.R;
import com.xxxy.ljh.myapplication.activity.detail.ItemDetailActivity;
import com.xxxy.ljh.myapplication.model.Item;
import java.util.List;

/**
 * RecyclerView适配器类，用于展示物品列表。
 * 负责将物品数据绑定到RecyclerView的各个项中，并处理点击事件跳转至详情页。
 */
public class ItemAdapter extends RecyclerView.Adapter<ItemAdapter.ItemViewHolder> {

    private List<Item> itemList;
    private Context context; // 添加Context字段

    /**
     * 构造方法，初始化物品列表和上下文环境。
     *
     * @param itemList 物品数据列表
     * @param context  上下文对象，用于启动新的Activity
     */
    public ItemAdapter(List<Item> itemList, Context context) {
        this.itemList = itemList;
        this.context = context;
    }

    /**
     * 创建ViewHolder实例，加载布局文件。
     *
     * @param parent   父容器视图组
     * @param viewType 视图类型（本例未使用）
     * @return 新创建的ItemViewHolder实例
     */
    @NonNull
    @Override
    public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_item, parent, false);
        return new ItemViewHolder(view);
    }

    /**
     * 将指定位置的数据绑定到ViewHolder上，并设置点击监听器。
     *
     * @param holder   ViewHolder实例
     * @param position 数据在列表中的索引位置
     */
    @Override
    public void onBindViewHolder(@NonNull ItemViewHolder holder, int position) {
        Item item = itemList.get(position);
        holder.bind(item);

        // 设置点击事件跳转到详情页面
        holder.itemView.setOnClickListener(v -> {
            Intent intent = new Intent(context, ItemDetailActivity.class);
            intent.putExtra("item", item);
            context.startActivity(intent);
        });
    }

    /**
     * 获取列表项的数量。
     *
     * @return 列表大小
     */
    @Override
    public int getItemCount() {
        return itemList.size();
    }

    /**
     * 更新当前列表数据并通知界面刷新。
     *
     * @param newList 新的物品列表数据
     */
    public void updateList(List<Item> newList) {
        this.itemList = newList;
        notifyDataSetChanged();
    }

    /**
     * ViewHolder内部类，持有每个列表项的控件引用，并负责数据绑定操作。
     */
    public static class ItemViewHolder extends RecyclerView.ViewHolder {
        private TextView tvItemName, tvItemQuantity, tvItemDescription;

        /**
         * 构造方法，查找并保存布局中的控件引用。
         *
         * @param itemView 列表项对应的根视图
         */
        public ItemViewHolder(@NonNull View itemView) {
            super(itemView);
            tvItemName = itemView.findViewById(R.id.tvItemName);
            tvItemQuantity = itemView.findViewById(R.id.tvItemQuantity);
            tvItemDescription = itemView.findViewById(R.id.tvItemDescription);
        }

        /**
         * 绑定物品信息到对应控件上。
         * 若规格为空则显示物品类型；若都为空则显示“无描述”。
         *
         * @param item 当前要绑定的物品对象
         */
        public void bind(Item item) {
            tvItemName.setText(item.getItemName());
            tvItemQuantity.setText("数量: " + item.getQuantity());

            String description = item.getSpecification();
            if (description == null || description.isEmpty()) {
                description = item.getItemType();
            }
            tvItemDescription.setText(description != null ? description : "无描述");
        }
    }
}
